package com.zenglx.assembly.increasingSequence.impl.dao;

import com.zenglx.assembly.increasingSequence.impl.entity.SequenceGeneratorEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 字典数据库操作
 */
@Mapper
public interface SequenceGeneratorDao {

    /**
     * 更新序列号加1
     * @param tableName
     * @param seqKey
     * @param seqVal
     * @param version
     * @return
     */
    int update(@Param("tableName") String tableName,@Param("seqKey") String seqKey,@Param("seqVal") long seqVal
            ,@Param("version") int version);

    /**
     * 查询当前序列对象
     * @param tableName
     * @param seqKey
     * @return
     */
    SequenceGeneratorEntity get(@Param("tableName") String tableName, @Param("seqKey") String seqKey);

    /**
     * 插入一条记录
     * @param tableName
     * @param seqKey
     * @param seqVal
     * @return
     */
    int insert(@Param("tableName") String tableName,@Param("seqKey") String seqKey,@Param("seqVal") long seqVal);


    /**
     * 初始化表
     * @param tableName
     */
    void createTable(@Param("tableName") String tableName);

    /**
     * 删除表
     * @param tableName
     */
    void dropTable(@Param("tableName") String tableName);

    /**
     * 创建存储过程
     * @param tableName
     */
    void createProcedure(@Param("tableName") String tableName);

    /**
     * 删除存储过程
     */
    void dropProcedure();

    /**
     * 基于存储过程实现，获取递增序列值
     * @param seqKey
     * @return
     */
    long getByProcedure(@Param("seqKey") String seqKey);

}
